﻿using Matchingo.Common.Types.Enumerations;
using Matchingo.Common.Types.Types;

namespace Matchingo.Common.Types.Interfaces
{
    /// <summary>
    /// This Facade is meant to provide basic functionality to a majority of methods for interacting with the
    /// game as a means to mask the underlying complexity from objects that dont need to know about the details
    /// </summary>
    public interface IGameExecutionFacade
    {
        /// <summary>
        /// This method must be called before making use of any other functionality of this class
        /// </summary>
        void StartGameEngineExecution();
        
        /// <summary>
        /// Pulls up a given menu
        /// </summary>
        /// <param name="menu"></param>
        void ShowMenu(MenuModuleNames.ModuleNames menu);

        /// <summary>
        /// Closes any open menus
        /// </summary>
        void CloseMenu();

        /// <summary>
        /// Starts a new game
        /// </summary>
        /// <param name="aiPlayer">Whether or not this game is a real player, or an AI player (replays and AI games)</param>
        /// <param name="closeMenu">Whether or not to close any open menus while starting the new game</param>
        void StartNewGame(bool aiPlayer, bool closeMenu);

        /// <summary>
        /// Replay a given game
        /// </summary>
        /// <param name="game">The game to replay</param>
        void PlaybackGame(Game game);
    }
}
